package phone;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by 张英杰 on 2018/1/4.
 */
public class PhoneNumUtil {
	public static void main(String[] args) {
//		System.out.println(isMobile("18600876954")+"");
		System.out.println(isMobileNO("17710349903")+"");
		System.out.println(isMobileNO("10000876954")+"");
	}

//    移动号段：139 138 137 136 135 134 147 150 151 152 157 158 159 178 182 183 184 187 188
//    联通号段：130 131 132 155 156 185 186 145 176
//    电信号段：133 153 177 173 180 181 189
//    虚拟运营商号段：170 171
    /**
     * 验证手机格式
     * 有问题
     */
    public static boolean isMobile(String number) {
    /*
    移动：134、135、136、137、138、139、150、151、152、157(TD)、158、159、178(新)、182、184、187、188
    联通：130、131、132、152、155、156、185、186
    电信：133、153、170、173、177、180、181、189、（1349卫通）
    总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
    */
    	System.out.println(number.trim().length());
        if (number==number||number.trim().length()!=11){
            return false;
        }
        String num = "[1][34578]\\d{9}";//"[1]"代表第1位为数字1，"[34578]"代表第二位可以为3、4、5、7、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
      System.out.println("==="+number.matches(num.trim()));
            //matches():字符串是否在给定的正则表达式匹配
            return number.matches(num.trim());
       
            
    }
    
    /**
     * @see 验证手机号是否合法
     * @param mobiles
     * @return
     */
    public static boolean isMobileNO(String mobile){  
        if (mobile.length() != 11)
        {
            return false;
        }else{
            /**
             * 移动号段正则表达式
             */
            String pat1 = "^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
            /**
             * 联通号段正则表达式
             */
            String pat2  = "^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";
            /**
             * 电信号段正则表达式
             */
            String pat3  = "^((133)|(153)|(177)|(18[0,1,9])|(149))\\d{8}$";
            /**
             * 虚拟运营商正则表达式
             */
            String pat4 = "^((170))\\d{8}|(1718)|(1719)\\d{7}$";

            Pattern pattern1 = Pattern.compile(pat1);
            Matcher match1 = pattern1.matcher(mobile);
            boolean isMatch1 = match1.matches();
            if(isMatch1){
                return true;
            }
            Pattern pattern2 = Pattern.compile(pat2);
            Matcher match2 = pattern2.matcher(mobile);
            boolean isMatch2 = match2.matches();
            if(isMatch2){
                return true;
            }
            Pattern pattern3 = Pattern.compile(pat3);
            Matcher match3 = pattern3.matcher(mobile);
            boolean isMatch3 = match3.matches();
            if(isMatch3){
                return true;
            }
            Pattern pattern4 = Pattern.compile(pat4);
            Matcher match4 = pattern4.matcher(mobile);
            boolean isMatch4 = match4.matches();
            if(isMatch4){
                return true;
            }
            return false; 
        }
    } 
}
